home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2006 December
/
PCWorld_2006-12_cd.bin
/
v cisle
/
robocopy
/
rktools.exe
/
RCDATA
/
CABINET
/
rktools.msi
/
drvmgr.vbs
< prev
next >
Wrap
Text File
|
2003-04-18
|
17KB
|
669 lines
'----------------------------------------------------------------------
'
' Copyright (c) Microsoft Corporation 1998-2003
' All Rights Reserved
'
' Abstract:
'
' drvmgr.vbs - driver script for Windows .NET Server 2003
'
' Usage:
' drvmgr [-adl?] [-m model name] [-v Version] [-p Path]
' [-c Server] [-t Architecture] [-i InfFile]
'
' Example:
' drvmgr -d -m "driver" -v "Windows XP and Windows .NET Server 2003" -t Intel
' drvmgr -l -c \\server
'----------------------------------------------------------------------
option explicit
'
' Debugging trace flags, to enable debug output trace message
' change gDebugFlag to true.
'
const kDebugTrace = 1
const kDebugError = 2
dim gDebugFlag
gDebugFlag = false
'
' Messages to be displayed if the scripting host is not cscript
'
const kMessage1 = "Please run this script using CScript."
const kMessage2 = "This can be achieved by"
const kMessage3 = "1. Using ""CScript script.vbs arguments"" or"
const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
const kMessage5 = " using ""CScript //H:CScript //S"" and running the script "
const kMessage6 = " ""script.vbs arguments""."
'
' Operation action values.
'
const kActionUnknown = 0
const kActionAdd = 1
const kActionDel = 2
const kActionDelAll = 3
const kActionList = 4
const kErrorSuccess = 0
const kErrorFailure = 1
'
' Strings identifying environments
'
const kEnvironmentIntel = "Windows NT x86"
const kEnvironmentItanium = "Windows IA64"
const kEnvironmentMIPS = "Windows NT R4000"
const kEnvironmentAlpha = "Windows NT Alpha_AXP"
const kEnvironmentPowerPC = "Windows NT PowerPC"
const kEnvironmentWindows = "Windows 4.0"
const kEnvironmentUnknown = "unknown"
'
' Strings identifying architectures
'
const kArchIntel = "Intel"
const kArchItanium = "Itanium"
const kArchMIPS = "MIPS"
const kArchAlpha = "Alpha"
const kArchPowerPC = "PowerPC"
const kArchUnknown = "Unknown"
'
' Strings identifying driver versions
' Change these strings on localized builds
'
const kVersionWindows95 = "Windows 95, Windows 98, and Windows Millennium Edition"
const kVersion_NT31 = "Windows NT 3.1"
const kVersion35x = "Windows NT 3.5 or 3.51"
const kVersion351 = "Windows NT 3.51"
const kVersion40 = "Windows NT 4.0"
const kVersion50 = "Windows 2000, Windows XP and Windows .NET Server 2003"
const kVersion512 = "Windows XP and Windows .NET Server 2003"
main
'
' Main execution starts here
'
sub main
dim iAction
dim iRetval
dim strServer
dim strModel
dim strPath
dim strVersion
dim strArchitecture
dim strInfFile
'
' Abort if the host is not cscript
'
if not IsHostCscript() then
call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
kMessage5 & vbCRLF & kMessage6 & vbCRLF)
wscript.quit
end if
iRetval = ParseCommandLine(iAction, strServer, strModel, strPath, strVersion, _
strArchitecture, strInfFile)
if iRetval = kErrorSuccess then
select case iAction
case kActionAdd
iRetval = AddDriver(strServer, strModel, strPath, strVersion, _
strArchitecture, strInfFile)
case kActionDel
iRetval = DelDriver(strServer, strModel, strVersion, strArchitecture)
case kActionDelAll
iRetval = DelAllDrivers(strServer)
case kActionList
iRetval = ListDrivers(strServer)
case kActionUnknown
Usage(true)
exit sub
case else
Usage(true)
exit sub
end select
end if
end sub
'
' Add a driver
'
function AddDriver(strServer, strModel, strPath, strVersion, strArchitecture, strInfFile)
on error resume next
DebugPrint kDebugTrace, "In AddDriver"
dim oMaster
dim oDriver
dim iResult
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
set oDriver = CreateObject("Driver.Driver.1")
oDriver.ModelName = strModel
oDriver.Path = strPath
oDriver.DriverArchitecture = strArchitecture
oDriver.InfFile = strInfFile
oDriver.ServerName = strServer
odriver.DriverVersion = strVersion
oMaster.DriverAdd oDriver
if Err.Number = kErrorSuccess then
wscript.echo "Added driver """ & oDriver.ModelName & """"
iResult = kErrorSuccess
else
wscript.echo "Unable to add driver """ & oDriver.ModelName & """, error: 0x" _
& Hex(Err.Number) & ". " & Err.Description
iResult = kErrorFailure
end if
AddDriver = iResult
end function
'
' Delete a driver
'
function DelDriver(strServer, strModel, strVersion, strArchitecture)
on error resume next
DebugPrint kDebugTrace, "In DelDriver"
dim oMaster
dim oDriver
dim iRetval
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
set oDriver = CreateObject("Driver.Driver.1")
oDriver.ModelName = strModel
oDriver.DriverArchitecture = strArchitecture
oDriver.ServerName = strServer
odriver.DriverVersion = strVersion
oMaster.DriverDel oDriver
if Err.Number = kErrorSuccess then
wscript.echo "Deleted driver """ & oDriver.ModelName & """"
iRetval = kErrorSuccess
else
wscript.echo "Unable to delete driver """ & oDriver.ModelName & """, error: 0x" _
& Hex(Err.Number) & ". " & Err.Description
iRetval = kErrorFailure
end if
DelDriver = iRetval
end function
'
' Delete all drivers
'
function DelAllDrivers(strServer)
on error resume next
DebugPrint kDebugTrace, "In DelAllDrivers"
dim oMaster
dim oDriver
dim iResult
dim iTotal
dim iTotalDeleted
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
set oDriver = CreateObject("Driver.Driver.1")
iTotal = 0
iTotalDeleted = 0
for each oDriver in oMaster.Drivers(strServer)
if Err.Number = kErrorSuccess then
iTotal = iTotal + 1
wscript.echo
wscript.echo "Attempting to delete driver: " & oDriver.ModelName
wscript.echo " architecture: " & GetArchitecture(oDriver.Environment)
wscript.echo " version: " & GetVersion(oDriver.Version, oDriver.Environment)
wscript.echo " from server: " & oDriver.ServerName
oMaster.DriverDel oDriver
if Err.Number = kErrorSuccess then
wscript.echo "Success: Driver """ & oDriver.ModelName & """ was deleted"
iTotalDeleted = iTotalDeleted + 1
else
wscript.echo "Unable to delete driver """ & oDriver.ModelName & """, error: 0x" _
& Hex(Err.Number) & ". " & Err.Description
Err.Clear
end if
else
wscript.echo "Unable to delete drivers on server, error: 0x" & _
Hex(Err.Number) & ". " & Err.Description
DelAllDrivers = kErrorFailure
exit function
end if
next
wscript.echo "Number of drivers " & iTotal & ". Drivers deleted " & iTotalDeleted
DelAllDrivers = kErrorSuccess
end function
'
' List drivers
'
function ListDrivers(strServer)
on error resume next
DebugPrint kDebugTrace, "In ListDriver"
dim oMaster
dim oDriver
dim iResult
dim iTotal
dim vntDependentFiles
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
for each oDriver in oMaster.Drivers(strServer)
if Err.Number = kErrorSuccess then
wscript.echo ""
wscript.echo "ServerName : " & oDriver.ServerName
wscript.echo "DriverName : " & oDriver.ModelName
wscript.echo "Version : " & oDriver.Version
wscript.echo "DriverVersion : " & GetVersion(oDriver.Version, oDriver.Environment)
wscript.echo "DriverPath : " & oDriver.Path
wscript.echo "Environment : " & oDriver.Environment
wscript.echo "Architecture : " & GetArchitecture(oDriver.Environment)
wscript.echo "MonitorName : " & oDriver.MonitorName
wscript.echo "DataFile : " & oDriver.DataFile
wscript.echo "ConfigFile : " & oDriver.ConfigFile
wscript.echo "HelpFile : " & oDriver.HelpFile
vntDependentFiles = oDriver.DependentFiles
'
' If there are no dependent files, the method will set DependentFiles to
' an empty variant, so we check if the variant is an array of variants
'
if VarType(vntDependentFiles) = (vbArray + vbVariant) then
PrintDepFiles oDriver.DependentFiles
end if
Err.Clear
else
wscript.echo "Unable to list drivers, error: 0x" & Hex(Err.Number) & _
". " & Err.Description
ListDrivers = iErrorFailure
exit function
end if
next
wscript.echo "Success listing drivers"
ListDrivers = kErrorSuccess
end function
'
' Prints the contents of an array of variants
'
sub PrintDepFiles(Param)
on error resume next
dim iIndex
iIndex = LBound(Param)
if Err.Number = 0 then
wscript.echo "Dependent Files "
for iIndex = LBound(Param) to UBound(Param)
wscript.echo " " & Param(iIndex)
next
else
wscript.echo "Unable to print the dependent files, error 0x" & _
Hex(Err.Number ) & ". " & Err.Description
end if
end sub
'
' Debug display helper function
'
sub DebugPrint(uFlags, strString)
if gDebugFlag = true then
if uFlags = kDebugTrace then
wscript.echo "Debug: " & strString
end if
if uFlags = kDebugError then
if Err <> 0 then
wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
end if
end if
end if
end sub
'
' Parse the command line into it's components
'
function ParseCommandLine(iAction, strServer, strModel, strPath, strVersion, strArchitecture, strInfFile)
on error resume next
DebugPrint kDebugTrace, "In the ParseCommandLine"
dim oArgs
dim iIndex
iAction = kActionUnknown
iIndex = 0
set oArgs = wscript.Arguments
while iIndex < oArgs.Count
select case oArgs(iIndex)
case "-a"
iAction = kActionAdd
case "-d"
iAction = kActionDel
case "-l"
iAction = kActionList
case "-x"
iAction = kActionDelAll
case "-c"
iIndex = iIndex + 1
strServer = oArgs(iIndex)
case "-m"
iIndex = iIndex + 1
strModel = oArgs(iIndex)
case "-p"
iIndex = iIndex + 1
strPath = oArgs(iIndex)
case "-v"
iIndex = iIndex + 1
strVersion = oArgs(iIndex)
case "-t"
iIndex = iIndex + 1
strArchitecture = oArgs(iIndex)
case "-i"
iIndex = iIndex + 1
strInfFile = oArgs(iIndex)
case "-?"
Usage(true)
exit function
case else
Usage(true)
exit function
end select
iIndex = iIndex + 1
wend
if Err.Number <> 0 then
wscript.echo "Unable to parse command line, error 0x" & _
Hex(Err.Number) & ". " & Err.Description
ParseCommandLine = kErrorFailure
else
ParseCommandLine = kErrorSuccess
end if
end function
'
' Display command usage.
'
sub Usage(bExit)
wscript.echo "Usage: drvmgr [-adlx?] [-m model] [-v version] [-p path]"
wscript.echo " [-c server] [-t architecture] [-i inf file]"
wscript.echo "Arguments:"
wscript.echo "-a - add the specified driver"
wscript.echo "-c - server name"
wscript.echo "-d - delete the specified driver"
wscript.echo "-i - inf file name"
wscript.echo "-l - list all drivers"
wscript.echo "-m - driver model name"
wscript.echo "-p - driver file path"
wscript.echo "-t - architecture"
wscript.echo "-v - version"
wscript.echo "-x - delete all drivers that are not in use"
wscript.echo "-? - display command usage"
wscript.echo ""
wscript.echo "Examples:"
wscript.echo "drvmgr -a -m ""driver"" -t Intel -v ""Windows 2000, Windows XP and Windows .NET Server 2003"""
wscript.echo "drvmgr -a -m ""driver"" -t Intel -v ""Windows NT 4.0 or 2000"
wscript.echo "drvmgr -a -m ""driver"" -t Intel -v ""Windows 95, Windows 98, and Windows Millennium Edition"" -p c:\drv\win9x"
wscript.echo "drvmgr -a -m ""driver"" -t Itanium -v ""Windows XP and Windows .NET Server 2003"""
wscript.echo "drvmgr -d -m ""driver"" -v ""Windows 2000, Windows XP and Windows .NET Server 2003"" -t Intel"
wscript.echo "drvmgr -l -c \\server"
wscript.echo "drvmgr -x -c \\server"
if bExit then
wscript.quit(1)
end if
end sub
'
' Determines which program is used to run this script.
' Returns true if the script host is cscript.exe
'
function IsHostCscript()
on error resume next
dim strFullName
dim strCommand
dim i, j
dim bReturn
bReturn = false
strFullName = WScript.FullName
i = InStr(1, strFullName, ".exe", 1)
if i <> 0 then
j = InStrRev(strFullName, "\", i, 1)
if j <> 0 then
strCommand = Mid(strFullName, j+1, i-j-1)
if LCase(strCommand) = "cscript" then
bReturn = true
end if
end if
end if
if Err <> 0 then
call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
& ". " & vbCRLF & "The scripting host could not be determined.")
end if
IsHostCscript = bReturn
end function
'
' Converts a driver environment string to a string
' representing the architecture of the driver.
'
function GetArchitecture(strEnvironment)
dim strArchitecture
if strEnvironment = kEnvironmentIntel then
strArchitecture = kArchIntel
elseif strEnvironment = kEnvironmentMIPS then
strArchitecture = kArchMIPS
elseif strEnvironment = kEnvironmentAlpha then
strArchitecture = kArchAlpha
elseif strEnvironment = kEnvironmentPowerPC then
strArchitecture = kArchPowerPC
elseif strEnvironment = kEnvironmentWindows then
strArchitecture = kArchIntel
elseif strEnvironment = kEnvironmentItanium then
strArchitecture = kArchItanium
else
strArchitecture = kArchUnknown
end if
GetArchitecture = strArchitecture
end function
'
' Converts a driver environment string and a number to
' a string representing the driver version
'
function GetVersion(uVersion, strEnvironment)
dim strVersion
select case uVersion
case 0:
if strEnvironment = kEnvironmentWindows then
strVersion = kVersionWindows95
else
strVersion = kVersionNT31
end if
case 1:
if strEnvironment = kEnvironmentPowerPC then
strVersion = kVersion351
else
strVersion = kVersion35x
end if
case 2:
strVersion = kVersion40
case 3:
if strEnvironment = kEnvironmentItanium then
strVersion = kVersion512
else
strVersion = kVersion50
end if
case else:
strVersion = kArchUnknown
end select
GetVersion = strVersion
end function